"""
自定义日志格式化器
提供移除文件扩展名的日志格式
"""

import logging
import os
from typing import Optional


class CleanFilenameFormatter(logging.Formatter):
    """移除文件名扩展名的日志格式化器
    
    将日志中的文件名从 'example.py' 格式化为 'example'
    使日志输出更加简洁美观
    """
    
    def __init__(self, fmt: Optional[str] = None, datefmt: Optional[str] = None):
        """初始化格式化器
        
        Args:
            fmt: 日志格式字符串，默认为移除扩展名的格式
            datefmt: 日期格式字符串
        """
        if fmt is None:
            fmt = "[%(asctime)s] [%(levelname)s] [%(clean_filename)s.%(funcName)s:%(lineno)d] %(message)s"
        super().__init__(fmt, datefmt)
    
    def format(self, record: logging.LogRecord) -> str:
        """格式化日志记录
        
        Args:
            record: 日志记录对象
            
        Returns:
            str: 格式化后的日志字符串
        """
        # 移除文件扩展名
        if hasattr(record, 'filename'):
            record.clean_filename = os.path.splitext(record.filename)[0]
        else:
            record.clean_filename = record.filename
        
        return super().format(record)


# 预定义的格式字符串
CLEAN_FORMAT = "[%(asctime)s] [%(levelname)s] [%(clean_filename)s.%(funcName)s:%(lineno)d] %(message)s"
SIMPLE_FORMAT = "[%(asctime)s] [%(levelname)s] %(message)s"
DETAILED_FORMAT = "[%(asctime)s] [%(levelname)s] [%(clean_filename)s.%(funcName)s:%(lineno)d] [%(threadName)s] %(message)s"